/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦，本文采用木兰宽松许可证第2版]
 * 
 * https://zhiqim.org/project/zhiqim_kit/zhiqim_git.htm
 *
 * ZhiqimGit is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.git.constants;

import org.zhiqim.git.objer.objectid.ObjectId;

/**
 * Git对象常量定义
 *
 * @version v1.0.0 @author zhichenggang 2014-3-21 新建与整理
 */
public interface GitObjectConstants
{
    public static final ObjectId ZEROID                                 = new ObjectId(0, 0, 0, 0, 0);
    public static final String ZEROID_STR                               = ZEROID.getName();
    
    /**********************************************************************************************************/
    //文件模式（5种），目录、标准文件、可执行文件、Git外链，Git内链
    /**********************************************************************************************************/
    
    /** 树模式 */
    public static final int MODE_TREE                                   = 40000;
    
    /** 标准文件模式 */
    public static final int MODE_FILE_REGULAR                           = 100644;
    
    /** 可执行文件模式 */
    public static final int MODE_FILE_EXECUTABLE                        = 100755;
    
    /** Git链接模式 */
    public static final int MODE_GITLINK                                = 160000;

    /** 符号链接模式 */
    public static final int MODE_SYMLINK                                = 120000;
    
    /**********************************************************************************************************/
    //对象类型（4个标准类型，2个传输标志），在对象头中第一字节的2,3,4位，如：10110000中011表示是文件类型
    /**********************************************************************************************************/
    
    //对象类型整数状态
    /** 错误类型 */
    public static final int OBJ_BAD                                     = -1;
    
    /** 提交类型 */
    public static final int OBJ_COMMIT                                  = 1;//001

    /** 树类型 */
    public static final int OBJ_TREE                                    = 2;//010

    /** 文件类型 */
    public static final int OBJ_BLOB                                    = 3;//011

    /** 标签类型 */
    public static final int OBJ_TAG                                     = 4;//100
    
    /** 未使用，保留 */
    public static final int OBJ_TYPE_5                                  = 5;//101

    /** 包内对象类型（增量偏移值） */
    public static final int OBJ_OFS_DELTA                               = 6;//110

    /** 包内对象类型（增量引用） */
    public static final int OBJ_REF_DELTA                               = 7;//111
    
    //标准类型字符串状态
    
    /** 提交类型 */
    public static final String TYPE_COMMIT                              = "commit";

    /** 树类型 */
    public static final String TYPE_TREE                                = "tree";
    
    /** 实体类型 */
    public static final String TYPE_BLOB                                = "blob";

    /** 标志类型 */
    public static final String TYPE_TAG                                 = "tag";
    
    //标准类型字节状态
    
    /** 提交类型 */
    public static final byte[] TYPE_COMMIT_BYTES                        = {'c', 'o', 'm', 'm', 'i', 't'};
    
    /** 树类型 */
    public static final byte[] TYPE_TREE_BYTES                          = {'t', 'r', 'e', 'e'};
    
    /** 实体类型 */
    public static final byte[] TYPE_BLOB_BYTES                          = {'b', 'l', 'o', 'b'};
    
    /** 标签类型 */
    public static final byte[] TYPE_TAG_BYTES                           = {'t', 'a', 'g'};
    
    /**********************************************************************************************************/
    //包索引相关静态值
    /**********************************************************************************************************/
    
    /** 分段表0－255共256个，目的是通过oid首字节(0x00-0xFF)找到对应的分段，256刚好是对象数目 */
    public static final int FANOUT                                      = 256;
    
    /** 是否大文件偏移 */
    public static final long IS_O64                                     = 1L << 31;
    
}
